package RMIClient;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.List;

import javax.swing.JOptionPane;

import beans.*;

import interfaz.TDACasaCentral;

public class RMIClienteCC 
{
	
	private static RMIClienteCC instancia;
	private String hostname = "localhost";
	TDACasaCentral rmiController;
	
	
	public static RMIClienteCC getInstancia()
	{
		if (instancia==null)
		{
			instancia = new RMIClienteCC();
		}
		return instancia;
	}
	
	public RMIClienteCC()
	{
		instancia = this;
		getStub();
	}
	
	public static void main(String[] args) 
	{

		
		new RMIClienteCC();
	
	}
	
	private boolean getStub()
	{
		try 
		{
			rmiController = (TDACasaCentral)Naming.lookup ("//"+hostname+"/rmiController");
			System.out.println("Conexion establecida");
			return true;
		} 
		catch (Exception e) 
		{
			System.out.println("No se pudo establecer la conexion");
			JOptionPane.showMessageDialog(null, "Error no me puedo conectar al server \n "+"//"+hostname+"/rmiController");
		}
		return false;
	}

	

	public void altaProveedor(ProveedorBean proveedor)
	{
		try 
		{
			rmiController.altaProveedor(proveedor);

		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
	
	}
	
	public void bajaProveedor(ProveedorBean proveedor)
	{
		try
		{
			rmiController.bajaProveedor(proveedor);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
	
	}
	
	public void modificarProveedor(ProveedorBean proveedor)
	{
		try
		{
			rmiController.modificarProveedor(proveedor);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
	
	}
	
	
	public boolean altaRodamiento(RodamientoBean rodamiento)
	{
		try 
		{
			return rmiController.altaRodamiento( rodamiento );
		}
		catch (RemoteException e) 
		{
			e.printStackTrace();
			return false;
		}
	}
	
	public boolean bajaRodamiento(RodamientoBean rodamiento)
	{
		try
		{
			return rmiController.bajaRodamiento(rodamiento);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean modificarRodamiento(RodamientoBean rodamiento)
	{
		try
		{
			return rmiController.modificarRodamiento(rodamiento);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean modificarODV(OficinaVentaBean odv)
	{
		try
		{
			return rmiController.modificarODV(odv);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	public ClienteBean buscarClientesPorCriterio (String razonSocial, String cuit) 
	{
		ClienteBean clienteBean = new ClienteBean();
		try
		{
			List<ClienteBean> listaBeanCliente = rmiController.obtenerClientesPorCriterio( razonSocial, cuit );
			if(!listaBeanCliente.isEmpty())
			{
				clienteBean = listaBeanCliente.get(0);
			}
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return clienteBean;
	}
	
	
	public ClienteBean buscarCliente(String cuit) 
	{
		try
		{
			return rmiController.obtenerClientePorCuit(cuit);		
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
			return null;
		}	
	}
	
	
	public ProveedorBean buscarProveedor(String cuit) 
	{
		try
		{
			return rmiController.obtenerProveedorPorCuit(cuit);		
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
			return null;
		}	
	}
	
	public RodamientoBean buscarRodamiento(String codigo)
	{
		try
		{
			return rmiController.obtenerRodamientoPorCodigo(codigo);		
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
			return null;
		}	
	}
/*	//Ver si hacen falta
	public List<CondicionBean> cargarComboCondiciones(){
		try {
			return rmiController.getCondiciones();

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return new ArrayList<CondicionBean>();	
	}
	
	
	public List<TipoProveedorBean> cargarComboTipoProveedores()
	{
		try {
			return rmiController.getTipoProveedores();

		} catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return new ArrayList<TipoProveedorBean>();	
	}

	public ProveedorBean cargarComboProveedor()
	{
		try {
			return rmiController.obtenerProveedor();

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return new null;
	}

	public List<OficinaVentaBean> cargarComboODV(){
		try {
			return rmiController.getODV();

		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return new ArrayList<OficinaDeVentasBean>();	
	}
*/
	public UsuarioBean loginUsuario (UsuarioBean usuario)
	{
		try
		{
			return rmiController.loginUsuario(usuario);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
/*	
	public Map<Integer,List<String>> getProductosByCriterio(ProductoBean productoBean){
		try{
			return rmiController.getProductosByCriterio(productoBean);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return null;
	}
	
*/	
	public boolean cargarListaPrecios(ListaPreciosBean lista)
	{
		try
		{
			return rmiController.cargarListaPrecios(lista);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
}
	
	public boolean generarCotizacion( CotizacionBean cot)
	{
		try
		{
			return rmiController.generarCotizacion( cot );
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	public List<CotizacionBean> obtenerCotizacionesPorCliente(String cuit)
	{
		try
		{
			return rmiController.obtenerCotizacionesPorCliente(cuit);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	
	
	public SolicitudCompraBean generarSolicitudCompra(CotizacionBean solCot)
	{
		try
		{
			return rmiController.generarSolicitudCompra(solCot);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	
	public FacturaBean generarFactura( CotizacionBean solCot)
	{
		try
		{
			return rmiController.generarFactura(solCot);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	public List<OrdenCompraBean> generarOrdenesCompra(SolicitudCompraBean solComp)
	{
		try
		{
			return rmiController.generarOrdenesCompra(solComp);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
			return null;
		}
	}
	
}
